/**
 * 计算日期差
 * @param {string} dateString - 时间字符串 (支持格式：YYYY-MM-DD, YYYY/MM/DD, ISO8601)
 * @param {boolean} [abs=false] - 是否返回绝对值
 * @returns {number|null} 相差天数（失败返回null）
 */
export function calculateDaysDifference(dateString, abs = false) {
    try {
        // 处理不同日期格式
        const normalizeDate = str => {
            if (str.includes('-')) return str.replace(/-/g, '/')
            return str
        }
        // 创建日期对象（兼容Safari）
        const targetDate = new Date(normalizeDate(dateString))
        if (isNaN(targetDate)) throw new Error('Invalid date format')
        // 获取当前日期（基于本地时区）
        const now = new Date()
        // 重置时间部分到午夜00:00:00
        const resetTime = date => {
            date.setHours(0)
            date.setMinutes(0)
            date.setSeconds(0)
            date.setMilliseconds(0)
            return date
        }
        // 处理后的日期对象
        const cleanNow = resetTime(new Date(now))
        const cleanTarget = resetTime(new Date(targetDate))
        // 计算毫秒差并转换天数
        const timeDiff = cleanNow - cleanTarget
        let daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24))
        // 处理边界情况（夏令时变化等）
        if (daysDiff < 0 && timeDiff % (1000 * 3600 * 24) !== 0) {
            daysDiff += 1
        }
        return abs ? Math.abs(daysDiff) : daysDiff
    } catch (error) {
        console.error('日期计算错误:', error)
        return null
    }
}